package br.usjt.mazerobot.commons.comunicacao;

public class Pacote {

    private byte[] dados;

    public Pacote() {
        dados = new byte[16];
    }

    public Pacote(byte[] pacote) {
        this.dados = pacote;
    }

    /**
     * Atribui o byte de cabeçalho ao pacote. Posição 0 do pacote.
     * 
     * @param cabecalho Byte de cabeçalho.
     */
    public void setCabecalho(byte cabecalho) {
        dados[0] = cabecalho;
    }

    /**
     * Retorna o byte de cabeçalho do pacote. Posição 0 do pacote.
     * 
     * @return Byte de cabeçalho.
     */
    public byte getCabecalho() {
        return dados[0];
    }

    /**
     * Atribui os bytes de conteúdo ao pacote. Posição de 1 à 14 do pacote.
     * É necessário que o array de conteúdo cotenha 14 posições ou será lançada
     * uma IllegalArgumentException.
     * 
     * @param conteudo Array de byte contendo 14 bytes de conteúdo.
     */
    public void setConteudo(byte[] conteudo) {

        if (conteudo.length == 14) {
            for (int i = 0; i < conteudo.length; i++) {
                dados[i + 1] = conteudo[i];
            }
        } else {
            throw new IllegalArgumentException("O array de dados precisa conter 14 bytes");
        }
    }

    /**
     * Retorna os bytes de conteúdo do pacote. Posição de 1 à 14 do pacote.
     * 
     * @return Array de bytes com 14 posições.
     */
    public byte[] getConteudo() {

        byte[] conteudo = new byte[14];

        for (int i = 0; i < conteudo.length; i++) {
            conteudo[i] = dados[i + 1];
        }

        return conteudo;
    }

    /**
     * Atribui o byte de rodape ao pacote. Posição 15 do pacote.
     * 
     * @param cabecalho Byte de cabeçalho.
     */
    public void setRodape(byte rodape) {
        dados[15] = rodape;
    }

    /**
     * Retorna o byte de rodape do pacote. Posição 15 do pacote.
     * 
     * @return Byte de cabeçalho.
     */
    public byte getRodape() {
        return dados[15];
    }

    /**
     * Retorna pacote inteiro, cabeçalho, conteúdo e rodapé.
     * 
     * @return Array de byte com 16 posições.
     */
    public byte[] getDados() {
        return dados;
    }

    public void setDados(byte[] dados) {
        this.dados = dados;
    }
}
